Cheat Engine gtutorial-i386闯关记 第二关
内容回顾:
进入第二关后会看到如下界面:
第二关简直丧心病狂,除了要1vs2,电脑攻高血厚(攻击力和血都是玩家的2倍);更要命的玩家一次只能攻击一个目标,但是会同时受到2个目标的还击,躲都躲不了。
换句话说,除非改代码,否则根本无法过关。如果Freeze玩家HP,侥幸干掉一个目标,剩下的一个目标瞬间能灭掉玩家,不管玩家有多少血。估计是作者直接把玩家的HP清零了。(顺带一提,如果读者自己扫描几次游戏,会发现玩家的HP是100,2个电脑玩家的HP是200;玩家的每次攻击造成电脑-1HP,而电脑造成玩家-2HP)。
这一关的提示让我想起Cheat Engine官网上的一篇教程:Find the team id in the player structure
这一关玩家的HP有精确的数值,所以"Scan Type"改成"Exact Value"即可。玩家挨几次打,马上能定位存放玩家血量的变量,将该变量加入Cheat Table后,右键"Find out what writes to this address",然后切换进游戏,让玩家再被打一顿,就会显示修改玩家HP的代码了:
在教程Find the team id in the player structure 中间接的提到,有些游戏可能会设计如下形式的扣血函数:
int DecreaseHP(RoleObj*);
当玩家(假设为PlayerObj,继承自RoleObj)或者电脑(假设为CPUObj,同样继承自RoleObj)掉血时,会把PlayObj和RoleObj传递给DecreaseHP函数,由该函数完成扣血功能。借助这个思路,让我假设指令。
gtutorial-i386.exe+34B70 - 29 50 50 - sub [eax+50],edx
就是DecreaseHP函数中完成扣血的指令。根据这样的假设,当电脑收到攻击后也会执行这条指令,在此设置断点,我们不就可以查看并比对PlayObj和CPUObj的内存布局了?CE提供了较为简便的方法实现上诉目的:
1). 在"Memory Viewer"窗口指令"gtutorial-i386.exe+34B70 - 29 50 50 - sub [eax+50],edx"处右键--选择"Find out what address this instruction access",点击该菜单项后会弹出"Changed Address by xxxx"窗口:
2). 返回到游戏,让玩家和2个CPU都掉血,然后查看窗口中的内存项,由于在游戏中我们修改了3个对象的血量,所以窗口中有3个记录项。全选这3个记录项,右键选择"Open dissect data with selected address",这时CE会问一堆问题,一路勾选确定最终打开数据解析窗口:
大家注意到偏移窗口中偏移0x50和0x54这两行数据没?这是整个窗口中为数不多的看着有点意义的数值。结合反汇编代码,我们可以断定对象首地址的偏移为0x50处为角色当前HP值,而偏移0x54处为角色MAX HP值。有了MAX HP这个依据,我们就可以在AA("Auto assemble")窗口中区分当前修改的是玩家还是CPU。
回到Memory Viewer窗口,准备编写注入脚本,选中"sub [eax+50],edx"指令,点击菜单项Tools--"Auto assemble"--Template--"AOB injection",下面的代码片是我的注入脚本:
define(symbol, 29 50 50 C3 00 00)
[ENABLE]
aobscanmodule(INJECT,gtutorial-i386.exe,29 50 50 C3 00 00) // should be unique
assert(INJECT, symbol)
alloc(newmem,$1000)
label(cmpEnd)
label(code)
label(return)
newmem:
cmp [eax+54],(int)100
jnz CPURole
mov edx, (int)0
jmp cmpEnd
CPURole:
cmp [eax+54],(int)200
jnz cmpEnd
mov edx (int)200
cmpEnd:
code:
sub [eax+50],edx
ret
add [eax],al
jmp return
保存脚本,然后点击AA窗口File--"Assign to current cheat table",将脚本分配到Cheat Table中,然后激活脚本,返回到游戏中,验证我们能不能击毁目标:
第一击:
第二击,通关:
预告:
明日将更新《Cheat Engine 进阶教程:gtutorial-i386闯关记 第三关 [完结撒花]》
- End -
看雪ID:hyjxiaobia
https://bbs.pediy.com/user-399589.htm
本文由看雪论坛 hyjxiaobia 原创
转载请注明来自看雪社区
热门图书推荐:
征题正在火热进行中!
(晋级赛Q1即将于3月10日开启,敬请期待!)
热门文章阅读
1、Zircon - Fuchsia 内核分析 - 启动(内核初始化)
热门课程推荐
公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com